package org.rslai.autotest.core.page;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

/**
 * Select处理方法
 * @author rslai
 */
public interface Select {

	/**
	 * 从选择框(select)中返回所有选中的选项(option)的 Text 属性
	 * @param by 选择框(select)的By信息
	 * @return 所有选中的选项(option)的 Text 属性
	 */
	public String[] getSelectedVisibleTexts(By by);

	/**
	 * 从选择框(select)中返回所有选中的选项(option)的 Value 属性
	 * @param by 选择框(select)的By信息
	 * @return 所有选中的选项(option)的 Value 属性
	 */
	public String[] getSelectedValues(By by);

	/**
	 * 从选择框(select)中返回所有选中的选项(option)的 Index
	 * @param by 选择框(select)的By信息
	 * @return 所有选中的选项(option)的 Index
	 */
	public String[] getSelectedIndexs(By by);

	/**
	 * 从选择框(select)中返回所有选中的选项(option)的 id 属性
	 * @param by 选择框(select)的By信息
	 * @return 所有选中的选项(option)的 id 属性
	 */
	public String[] getSelectedIds(By by);

	/**
	 * 从选择框(select)中返回第一个选中的选项(option)的 Text 属性
	 * @param by 选择框(select)的By信息
	 * @return 第一个选中的选项(option)的 Text 属性
	 */
	public String getSelectedVisibleText(By by);

	/**
	 * 从选择框(select)中返回第一个选中的选项(option)的 Value 属性
	 * @param by 选择框(select)的By信息
	 * @return 第一个选中的选项(option)的 Value 属性
	 */
	public String getSelectedValue(By by);

	/**
	 * 从选择框(select)中返回第一个选中的选项(option)的 index
	 * @param by 选择框(select)的By信息
	 * @return 第一个选中的选项(option)的 index
	 */
	public int getSelectedIndex(By by);

	/**
	 * 从选择框(select)中返回第一个选中的选项(option)的 id 属性
	 * @param by 选择框(select)的By信息
	 * @return 第一个选中的选项(option)的 id 属性
	 */
	public String getSelectedId(By by);

	/**
	 * 从选择框(select)中返回第一个选中的选项(option)
	 * @param by 选择框(select)的By信息
	 * @return 第一个选中的选项(option)
	 */
	public WebElement getSelectedOption(By by);

	/**
	 * 返回选择框(select)中是否有被选中的选项(option)
	 * @param by 选择框(select)的By信息
	 * @return true：有选中选项(option)，false：没有选中选项(option)
	 */
	public boolean isSomethingSelected(By by);

	/**
	 * 返回选择框(select)的所有选项(option)的显示内容
	 * @param by 选择框(select)的By信息
	 * @return 所有选项(option)的显示内容数组
	 */
	public String[] getSelectOptions(By by);

	/**
	 * 根据 option 的显示内容选中选择框的指定选项
	 * @param by 选择框(select)的By信息
	 * @param visibleText 选项(option)的显示内容
	 */
	public void selectByVisibleText(By by, String visibleText);

	/**
	 * 根据 option 的 Value 内容选中选择框的指定选项
	 * @param by 选择框(select)的By信息
	 * @param optionValue 选项(option)的 Value 内容
	 */
	public void selectByValue(By by, String optionValue);

	/**
	 * 根据 option 的 index 选中选择框的指定选项
	 * @param by 选择框(select)的By信息
	 * @param index 选项(option)的 index
	 */
	public void selectByIndex(By by, int index);

	/**
	 * 根据 option 的显示内容增加选中选择框的指定选项（用于支持多选）
	 * @param by 选择框(select)的By信息
	 * @param visibleText 选项(option)的显示内容
	 */
	public void addSelectByVisibleText(By by, String visibleText);

	/**
	 * 根据 option 的 Value 内容增加选中选择框的指定选项（用于支持多选）
	 * @param by 选择框(select)的By信息
	 * @param optionValue 选项(option)的 Value 内容
	 */
	public void addSelectByValue(By by, String optionValue);

	/**
	 * 根据 option 的 index 增加选中选择框的指定选项（用于支持多选）
	 * @param by 选择框(select)的By信息
	 * @param index 选项(option)的 index
	 */
	public void addSelectByIndex(By by, int index);

	/**
	 * 根据 option 的显示内容取消选中选择框的指定选项
	 * @param by 选择框(select)的By信息
	 * @param visibleText 选项(option)的显示内容
	 */
	public void removeSelectByVisibleText(By by, String visibleText);

	/**
	 * 根据 option 的 Value 内容取消选中选择框的指定选项
	 * @param by 选择框(select)的By信息
	 * @param optionValue 选项(option)的 Value 内容
	 */
	public void removeSelectByValue(By by, String optionValue);

	/**
	 * 根据 option 的 index 取消选中选择框的指定选项
	 * @param by 选择框(select)的By信息
	 * @param index 选项(option)的 index 内容
	 */
	public void removeSelectByIndex(By by, int index);

	/**
	 * 选择框取消所有选中
	 * @param by
	 */
	public void removeAllSelect(By by);

}
